﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace Scope8
{

    /// <summary>
    /// Diese Klasse repräsentiert einen Imageserver der Charite.
    /// </summary>
    class ChariteImageServer : ImageServer
    {
        /// <summary>
        /// Standardkonstruktor der Klasse. hier automatisch die ServerURL festgelegt.
        /// </summary>
        public ChariteImageServer()
        {
            ServerURL = ChariteConstants.chariteURL_XMLContent;
        }

        /// <summary>
        /// Liefert eine Stringrepraesentation der Klasse zurück.
        /// </summary>
        /// <returns>die Stringrepraesentation der Klasse </returns>
        public override String ToString()
        {
            String returnString = "Charite";        

            return returnString;
        }

        /// <summary>
        /// Überschreibt die Methode der geerbten Klasse. Liefert zu der serverurl eine Liste von Sldies zurück, die aus der serverurl extrahiert wurde.
        /// </summary>
        /// <returns>eine Liste von Slides</returns>
        public override async Task<List<Slide>> getAvaiableSlides()
        {            
            XmlReader reader = await getXmlReader();

            AvaibleSlides = new List<Slide>();
 
            while (reader.Read())
            {
                Slide newOne = new ChariteSlide();
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        String foo = reader.Name;
                        if (reader.Name.Equals("wsi"))
                        {
                            if (reader.HasAttributes)
                            {
                                // Durch die Attribute navigieren
                                while (reader.MoveToNextAttribute())
                                {
                                    if (reader.Name.Equals("file"))
                                    {
                                        string[] split = reader.Value.Split(new Char[] { '/' });
                                        //split[split.Length - 1];
                                        newOne.setPicName(split[split.Length - 1]);

                                        String thedir = "";
                                        for (int i = 0; i < split.Length - 1; i++)
                                        {
                                            thedir = thedir + split[i] + "/";
                                        }

                                        newOne.setDir(thedir);
                                    }
                                     
                                    if (reader.Name.Equals("type"))
                                    {
                                        newOne.setPicName((newOne.getPicName() + "." + reader.Value));
                                    }

                                    if (reader.Name.Equals("width"))
                                    {
                                        newOne.setWidth(reader.Value);
                                    }

                                    if (reader.Name.Equals("height"))
                                    {
                                        newOne.setHeight(reader.Value);
                                    }

                                }
                                if (!newOne.empty())
                                {
                                    newOne.setServerURL(ChariteConstants.chariteUrl_pure);
                                    AvaibleSlides.Add(newOne);
                                }
                            }
                        }
                        break;
                }
            }
            return AvaibleSlides;
        }
    }
}
